package com.wyr.leetcode.step1.tree;

public class SumOfLeftLeaves {
    /**
     * 404. 左叶子之和
     * <p>
     * 给定二叉树的根节点 root ，返回所有左叶子之和。
     * <p>
     * http://dsaleetcode.cn/problems/sum-of-left-leaves/description/
     */
    public int sumOfLeftLeaves(TreeNode root) {
        if (root == null || root.left == null && root.right == null) {
            return 0;
        }
        return dfs(root);
    }

    public int dfs(TreeNode node) {
        int ans = 0;
        if (node.left != null) {
            ans += isLeafNode(node.left) ? node.left.val : dfs(node.left);
        }
        if (node.right != null && !isLeafNode(node.right)) {
            ans += dfs(node.right);
        }
        return ans;
    }

    // 判断是否是叶子节点
    public boolean isLeafNode(TreeNode node) {
        return node.left == null && node.right == null;
    }
}
